/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import general.util.EntitiesValidation;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import jpa.controller.ProdutoJpaController;
import jpa.entity.Detalhe;
import jpa.entity.Marca;
import jpa.entity.Produto;
import jpa.entity.UnidadeMedida;

/**
 *
 * @author isaias
 */
@ManagedBean
@ViewScoped
public class ProdutoBean implements Serializable{

    private String filterNameProduto;
    private Produto produto = new Produto();
    private Produto produtoSelected = new Produto();
    private Detalhe detalheSelected = new Detalhe();
    private Marca marcaSelected = new Marca();
    private UnidadeMedida unidadeMedidaSelected = new UnidadeMedida();
    
    /**
     * Creates a new instance of ProdutoBean
     */
    public ProdutoBean() {
    }

    private void clearInstances() {
         produto = new Produto();
         detalheSelected = new Detalhe();
         marcaSelected = new Marca();
         unidadeMedidaSelected = new UnidadeMedida();
    }
    
    public void save(){
        
         produto.setDetalhe(detalheSelected);
         produto.setMarca(marcaSelected);
         produto.setUnidadeMed(unidadeMedidaSelected);
        List<String> validateProduto = EntitiesValidation.validateProduto(produto);
        
        if(validateProduto.isEmpty()){
            try {
               
                new ProdutoJpaController().create(produto);
                clearInstances();
                
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Produto criado com sucesso!", null));
            } catch (Exception e) {
                e.printStackTrace();
                 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Erro ao tentar cadastrar produto!", null));
            }
            
            
        }else{
            for(String err : validateProduto){
                 FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    err, null));
            }
        }
        
        
    }
    
    public void delete(){
        try {
            new ProdutoJpaController().destroy(produto.getId());
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Produto removido com sucesso!", null));
        } catch (Exception e) {
            e.printStackTrace();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Erro ao tentar remover o produto selecionado!", null));
        }
    }
    
    public List<Produto> listProdutos(){
        return new ProdutoJpaController().findProdutoForName(filterNameProduto);
    }
    
    public String getFilterNameProduto() {
        return filterNameProduto;
    }

    public void setFilterNameProduto(String filterNameProduto) {
        this.filterNameProduto = filterNameProduto;
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public Produto getProdutoSelected() {
        return produtoSelected;
    }

    public void setProdutoSelected(Produto produtoSelected) {
        this.produtoSelected = produtoSelected;
    }

    public Detalhe getDetalheSelected() {
        return detalheSelected;
    }

    public void setDetalheSelected(Detalhe detalheSelected) {
        this.detalheSelected = detalheSelected;
    }

    public Marca getMarcaSelected() {
        return marcaSelected;
    }

    public void setMarcaSelected(Marca marcaSelected) {
        this.marcaSelected = marcaSelected;
    }

    public UnidadeMedida getUnidadeMedidaSelected() {
        return unidadeMedidaSelected;
    }

    public void setUnidadeMedidaSelected(UnidadeMedida unidadeMedidaSelected) {
        this.unidadeMedidaSelected = unidadeMedidaSelected;
    }
    
    
}
